package estadistec.logica.parser;

public class DiccionarioTiposInfo
{
	protected int idFuncion;
	protected int cantParam;
	protected int[] cantPorTipo;
	protected DataObjectTipos tipoRetorno;

	/**
	  * enum que representa los diferentes tipos descritos en el archivo
	  * de diccionario de datos.
	  */
	private enum Posicion{
		BOOL, ENTERO, FLOTANTE, CUALITATIVO,
		RANGO, LISTA;
	}

	/**
	  * @param id Identificador único de la función
	  * @param cantParametros Cantidad de parámetros que recibe esta función.
	  * @param tipoRetorno corresponde al enum interno @c Posicion.
	  */
	DiccionarioTiposInfo(int id, int cantParametros, String tipoRetorno)
	{
		this.idFuncion = id;
		this.cantParam = cantParametros;
		this.cantPorTipo = new int[6];
		this.tipoRetorno = DataObjectTipos.valueOf(tipoRetorno);
	}

	/**
	  * Aumenta el contador de la cantidad de parámetros de tipo @p tipo
	  * de la función representada por esta entrada del diccionario
	  */
	void agregarParametro(String tipo)
	{
		Posicion p = Posicion.valueOf(tipo);
		this.cantPorTipo[p.ordinal()]++;
	}

	/**
	  * Retorna la cantidad de parámetros de tipo @p tipo
	  * de la función representada por esta entrada del diccionario
	  */
	int getCantParam()
	{
		return this.cantParam;
	}

	/**
	  * Retorna el identificador de la función
	  * representada por esta entrada del diccionario
	  */
	int getIdFuncion()
	{
		return this.idFuncion;
	}

	/**
	  * Retorna el tipo de retorno de la función
	  * representada por esta entrada del diccionario
	  */
	DataObjectTipos getTipoRetorno()
	{
		return this.tipoRetorno;
	}

	/**
	  * Retorna la cantidad de parámetros de tipo @p tipo
	  * de la función representada por esta entrada del diccionario
	  */
	int getCantParametroTipo(DataObjectTipos tipo)
	{
		Posicion p = Posicion.valueOf(tipo.toString());
		return this.cantPorTipo[p.ordinal()];
	}

	void print()
	{
		System.out.print(idFuncion + " ");
		for(Integer i : cantPorTipo)
			System.out.print(i + " ");
		System.out.println(cantParam);
	}
}
